﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Data.SqlClient;
using Modelo;

namespace BaseDatos
{
    public class BDSalario
    {
        private static string conexionCentral = "Data Source=.\\sqlexpress; Initial Catalog=FarmaciaAurora; Integrated Security=true";
        private static string conexionSucursal1 = "Data Source=.\\sqlexpress; Initial Catalog=FarmaciaAuroraSucursal; Integrated Security=true";
        private static string conexionSucursal2 = "Data Source=.\\sqlexpress; Initial Catalog=FarmaciaAuroraSucursal2; Integrated Security=true";
        public static List<Salario> obtenerSueldos(string usuario)
        {
            SqlConnection sql = null;

            List<Salario> salarios = new List<Salario>();
            try
            {
                sql = new SqlConnection(conexionCentral);
                SqlCommand comando = sql.CreateCommand();
                comando.CommandText = "Select NroMes,Salario,Fecha from [Salario] Where NombreUsuario=@nom";
                comando.Parameters.AddWithValue("nom",usuario);
                sql.Open();
                SqlDataReader reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    Salario salario = new Salario();
                    
                    salario.Mes = Convert.ToInt32(reader["NroMes"]);
                   
                        salario.Fecha = Convert.ToDateTime(reader["Fecha"]);
                 
                    salario.salario = Convert.ToDouble(reader["Salario"]);
                    salarios.Add(salario);

                }

            }
            catch (Exception)
            {
                throw new Exception("Excepcion no esperada consulte con el administrador");
            }
            finally
            {
                if (sql != null)
                    sql.Dispose();
            }
            return salarios;
        }
        public static TotalSalarios buscarUsuario(string usuario)
        {

            SqlConnection sql = null;

            TotalSalarios salario = null;
            try
            {
                sql = new SqlConnection(conexionCentral);
                SqlCommand comando = sql.CreateCommand();
                comando.CommandText = "Select S.NombreUsuario,E.Ci,E.Nombre,E.ApPaterno,Count(NroMes)as MesesPagados,Sum(S.Salario) as TotalCobrado From [Cargo] as C,[Salario] as S,[Usuario] as U,[Empleado] as E where S.NombreUsuario=U.NombreDeUsuario and U.IdCargo=C.IdCargo and E.Ci=U.Ci group by S.NombreUsuario,E.Ci,E.Nombre,E.ApPaterno";

                sql.Open();
                SqlDataReader reader = comando.ExecuteReader();
                if (reader.Read())
                {
                    salario = new TotalSalarios(); 
                    salario.Ci = reader["Ci"].ToString();
                    salario.Usuario = reader["NombreUsuario"].ToString();
                    salario.Nombre = reader["Nombre"].ToString();
                    salario.Apellido = reader["ApPaterno"].ToString();
                    salario.MesesCobrados = Convert.ToInt32(reader["MesesPagados"]);
                    salario.TotalCobrado = Convert.ToDouble(reader["TotalCobrado"]);
                   
                }

            }
            catch (Exception)
            {
                throw new Exception("Excepcion no esperada consulte con el administrador");
            }
            finally
            {
                if (sql != null)
                    sql.Dispose();
            }
            return salario;
        }
        public static List<TotalSalarios> totalSalarios(ref double total)
        {

            SqlConnection sql = null;
            total = 0;
            List<TotalSalarios> salarios = new List<TotalSalarios>();
            try
            {
                sql = new SqlConnection(conexionCentral);
                SqlCommand comando = sql.CreateCommand();
                comando.CommandText = "Select S.NombreUsuario,E.Ci,E.Nombre,E.ApPaterno,Count(NroMes)as MesesPagados,Sum(S.Salario) as TotalCobrado From [Cargo] as C,[Salario] as S,[Usuario] as U,[Empleado] as E where S.NombreUsuario=U.NombreDeUsuario and U.IdCargo=C.IdCargo and E.Ci=U.Ci group by S.NombreUsuario,E.Ci,E.Nombre,E.ApPaterno";
                
                sql.Open();
                SqlDataReader reader = comando.ExecuteReader();
                while(reader.Read())
                {
                    TotalSalarios salario = new TotalSalarios();
                    salario.Ci = reader["Ci"].ToString();
                   salario.Usuario=reader["NombreUsuario"].ToString();
                   salario.Nombre = reader["Nombre"].ToString();
                   salario.Apellido = reader["ApPaterno"].ToString();
                   salario.MesesCobrados = Convert.ToInt32(reader["MesesPagados"]);
                   salario.TotalCobrado = Convert.ToDouble(reader["TotalCobrado"]);
                   total += salario.TotalCobrado;
                    salarios.Add(salario);
                }
                
            }
            catch (Exception)
            {
                throw new Exception("Excepcion no esperada consulte con el administrador");
            }
            finally
            {
                if (sql != null)
                    sql.Dispose();
            }
            return salarios;
        }
        
        public static int mesesPagados(string user)
        {

            SqlConnection sql = null;

            try
            {
                sql = new SqlConnection(conexionCentral);
                SqlCommand comando = sql.CreateCommand();
                comando.CommandText = "Select Count(*) as Pagados From [Salario] where NombreUsuario=@nombre";
                comando.Parameters.AddWithValue("nombre", user);
                sql.Open();
                SqlDataReader reader = comando.ExecuteReader();
                if (reader.Read())
                {
                    return Convert.ToInt32(reader["Pagados"]);
                }
                else
                    throw new Exception("Usuario no existe");
            }
            catch (Exception)
            {
                throw new Exception("Excepcion no esperada consulte con el administrador");
            }
            finally
            {
                if (sql != null)
                    sql.Dispose();
            }
        }
        public static void registrarPago(string user, int mes, float descuento)
        {
            SqlConnection sql = null;

            try
            {
                sql = new SqlConnection(conexionCentral);
                SqlCommand comando = sql.CreateCommand();
                comando.CommandText = "INSERT INTO [Salario] (NombreUsuario,NroMes,Salario,Fecha) VALUES (@nombre,@mes,@desc,@fec)";
                comando.Parameters.AddWithValue("nombre", user);
                comando.Parameters.AddWithValue("mes", mes);
                comando.Parameters.AddWithValue("desc", descuento);
                comando.Parameters.AddWithValue("fec", DateTime.Now);
                sql.Open();
                comando.ExecuteNonQuery();
            }
            catch (Exception)
            {
                throw new Exception("Excepcion no esperada consulte con el administrador");
            }
            finally
            {
                if (sql != null)
                    sql.Dispose();
            }
        }
    }
}
